Python数据分析之基情的择天记
作者:罗罗攀
Python爱好者社区专栏作者 Python爬虫爱好者
博客地址:http://www.jianshu.com/u/9104ebf5e177
人一生都可能无法逆天改命,但你却是要去奋斗一把
本文章主要通过最简单的共线性关系,利用gephi工具绘制择天记的人物关系图。
准备工作
在网上下载《择天记》小说以及创建小说人物的txt。
jieba库
需要下载gephi软件
注意:安装路径不能有中文字;需要安装java环境,不然无法使用gephi。
定义数据结构
import jieba names = {} relationships = {} linenames = [] all_names = []names用于存入小说人物和出场次数;relationships保存人物关系的有向边,该字典的键为有向边的起点,值为一个字典edge,edge的键是有向边的终点,值是有向边的权值,代表两个人物之间联系的紧密程度;linenames存入每行小说出现的人物;all_names是小说所有人物。
添加人名到jieba词库中
jieba库分词可能并不能把小说的人物都切开,我们需要把这些人名添加到词库中,以便成功分词。
f1 = open('names.txt',encoding='utf-8') for line in f1.readlines(): all_names.append(line.strip().strip('\ufeff')) for name in all_names: jieba.add_word(name)统计出场人数
f2 = open('择天记.txt',encoding='utf-8') for line in f2.readlines(): seg_list = jieba.cut(line) linenames.append([]) for i in seg_list: if i in all_names: linenames[-1].append(i) if names.get(i) is None: names[i] = 0 relationships[i] = {} names[i] +=1
通过图可以看出,陈长生作为主角,出场最多,而他的好基友是排第二的,而他的女票徐有容却是排到第五,这与一些玄幻小说不一样,注定了这是一部基情的小说。
人物关系及写入文件
for line in linenames: for name1 in line: for name2 in line: if name1 == name2: continue if relationships[name1].get(name2) is None: relationships[name1][name2]=1 else: relationships[name1][name2] += 1 import codecs with codecs.open('tian_node.txt','w','utf-8') as f: f.write("Id Label Weight\r\n") for name, times in names.items(): f.write(name + ' ' + name + ' ' + str(times) + '\r\n') with codecs.open('tian_edge.txt', 'w', "utf-8") as f: f.write("Source Target Weight\r\n") for name, edges in relationships.items(): for v, w in edges.items(): if w > 3: f.write(name + ' ' + v + " " + str(w) + "\r\n")绘制人物关系图
最后利用gephi绘制人物关系图。
关注后在公众号内回复“课程”即可获取:
1.崔老师爬虫实战案例免费学习视频。
2.丘老师数据科学入门指导免费学习视频。
3.陈老师数据分析报告制作免费学习视频。
4.玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。
5.丘老师Python网络爬虫实战免费学习视频。
为大家提供与Python相关的最新技术和资讯。
长按指纹 > 识别图中二维码 > 添加关注